﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Web.Services.Protocols;
using System.Windows.Forms;
using ProjetoJVA.Gui;
using ProjetoJVA.localhostResponsavel;

namespace ProjetoJVA.Gui
{
    public partial class ResponsavelTela : Form
    {
        Service1 servicoResponsavel = new Service1();
        int matricula;
        string nomeAluno;
        Boolean carregar;
        public ResponsavelTela(int matricula, string nome)
        {
            InitializeComponent();
            this.nomeAluno = nome;
            this.matricula = matricula;
            if (carregar == true)
            {
                Carregar2(matricula);
            }
            if (matricula != 1)
            {
                Carregar(matricula);
            }
        }

        private void NovoProfessorTela_Load(object sender, EventArgs e)
        {
            this.FormBorderStyle = FormBorderStyle.FixedDialog;
        }

        private void botaoCancelar_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }

        private void botaoOk_Click(object sender, EventArgs e)
        {
            if (campoCodigo.Text == "")
            {
                incluir();
            }
            else
            {
                Atualizar(matricula);
            }
        }

        public void incluir()
        {
            this.Cursor = Cursors.WaitCursor;
            try
            {
                Responsavel responsavel = new Responsavel();
                responsavel.Nome = campoNome.Text;
                responsavel.Endereco = campoEndereco.Text;
                responsavel.Email = campoEmail.Text.ToLower();
                responsavel.Sexo = campoSexo.Text;
                responsavel.Telefone = campoTelefone.Text;
                responsavel.Filiacao = campoFiliacao.Text;

                if (checkFinanceiro.Checked == true && checkAcademico.Checked == true)
                {
                    responsavel.Categoria = "Responsável Financeiro e Acadêmico";
                    if (matricula == 1)
                    {
                        servicoResponsavel.incluir(responsavel);
                        MessageBox.Show("Incluido com sucesso");
                        this.Dispose();

                    }
                    else
                    {
                        servicoResponsavel.inserir(responsavel, matricula);
                        MessageBox.Show("Incluido com sucesso");
                        this.Dispose();
                    }
                }

                if (checkAcademico.Checked == true && checkFinanceiro.Checked == false)
                {
                    responsavel.Categoria = checkAcademico.Text;
                    servicoResponsavel.incluir(responsavel);
                    if (checkFinanceiro.Enabled == false)
                    {
                        MessageBox.Show("Responsáveis incluidos com sucesso");
                        this.Dispose();
                        this.Cursor = Cursors.Default;
                        return;
                    }
                    campoNome.Text = "";
                    campoEndereco.Text = "";
                    campoEmail.Text = "";
                    campoSexo.Text = "";
                    campoTelefone.Text = "";
                    campoFiliacao.Text = "";
                    checkAcademico.Enabled = false;
                    checkAcademico.Checked = false;
                    this.Text = "Responsável 2";
                    MessageBox.Show("Incluido");
                    ResponsavelTela rt = new ResponsavelTela(matricula, nomeAluno);
                    this.Cursor = Cursors.Default;
                    return;
                }

                if (checkFinanceiro.Checked == true && checkAcademico.Checked == false)
                {
                    responsavel.Categoria = checkFinanceiro.Text;
                    servicoResponsavel.incluir(responsavel);
                    if (checkAcademico.Enabled == false)
                    {
                        MessageBox.Show("Responsáveis incluidos com sucesso");
                        this.Dispose();
                        this.Cursor = Cursors.Default;
                        return;
                    }
                    campoNome.Text = "";
                    campoEndereco.Text = "";
                    campoEmail.Text = "";
                    campoSexo.Text = "";
                    campoTelefone.Text = "";
                    campoFiliacao.Text = "";
                    this.Text = "Responsável 2";
                    checkFinanceiro.Enabled = false;
                    checkFinanceiro.Checked = false;
                    MessageBox.Show("Incluido");
                    ResponsavelTela rt = new ResponsavelTela(matricula, nomeAluno);
                    checkFinanceiro.Enabled = false;
                    this.Cursor = Cursors.Default;
                    return;
                }

                if (checkAcademico.Enabled == false && checkFinanceiro.Enabled == false)
                {
                    MessageBox.Show("Representates incluidos com sucesso");
                    this.Dispose();
                    this.Cursor = Cursors.Default; 
                }

                if (checkAcademico.Checked == false && checkFinanceiro.Checked == false || checkAcademico.Enabled == false || checkFinanceiro.Enabled == false)
                {
                    responsavel.Categoria = "";
                    servicoResponsavel.incluir(responsavel);
                }

            }
            catch (SoapException ex)
            {
                var menssagem = ex.Message;
                menssagem = menssagem.Remove(0, menssagem.LastIndexOf("--->"));
                menssagem = menssagem.Remove(0, menssagem.IndexOf(":") + 1);

                if (menssagem.IndexOf('\n') >= 0)
                {
                    menssagem = menssagem.Remove(menssagem.IndexOf('\n'));
                }

                MessageBox.Show(menssagem, "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }

            this.Cursor = Cursors.Default;
        }

        public void Atualizar(int matricula)
        {
            List<Responsavel> lista;
            lista = servicoResponsavel.pesquisar(matricula).ToList<Responsavel>();
            this.Cursor = Cursors.WaitCursor;
            try
            {
                Responsavel responsavel = new Responsavel();
                responsavel.CodResp1 = Convert.ToInt32(campoCodigo.Text);
                responsavel.Nome = campoNome.Text;
                responsavel.Endereco = campoEndereco.Text;
                responsavel.Email = campoEmail.Text;
                responsavel.Sexo = campoSexo.Text;
                responsavel.Telefone = campoTelefone.Text;
                responsavel.Filiacao = campoFiliacao.Text;

                if (checkFinanceiro.Checked == true && checkAcademico.Checked == true)
                {
                    responsavel.Categoria = "Responsável Financeiro e Acadêmico";
                    servicoResponsavel.alterar(responsavel, matricula);
                    if (lista.Count == 1)
                    {
                        MessageBox.Show("Incluido com sucesso");
                        this.Dispose();
                    }
                    else
                    {
                        servicoResponsavel.excluir(lista[1].CodResp1);
                        MessageBox.Show("Incluido com sucesso");
                        MessageBox.Show("Responsavel: " + lista[1].Nome + " Foi Excluido");
                        this.Dispose();
                    }
                    
                }

                if (checkAcademico.Checked == true && checkFinanceiro.Checked == false)
                {
                    responsavel.Categoria = checkAcademico.Text;
                    if(carregar == true)
                    {
                        servicoResponsavel.alterar(responsavel,matricula);
                        MessageBox.Show("Responsáveis incluidos com sucesso");
                        this.Dispose();
                        this.Cursor = Cursors.Default;
                        return;
                    }
                    
                    servicoResponsavel.alterar(responsavel,matricula);
                    MessageBox.Show("alterado com sucesso");

                    if (lista[0].Categoria != "Responsável Acadêmico" && lista.Count != 1 && carregar == false)
                    {
                        servicoResponsavel.excluir(lista[1].CodResp1);
                        MessageBox.Show("Responsavel: " + lista[1].Nome + " Foi Excluido");
                        MessageBox.Show("Adicione o segundo Responsável");
                        this.Text = "Responsável 2";
                        this.campoCodigo.Text = "";
                        this.campoNome.Text = "";
                        this.campoEndereco.Text = "";
                        this.campoEmail.Text = "";
                        this.campoSexo.Text = "";
                        this.campoTelefone.Text = "";
                        this.campoFiliacao.Text = "";
                        checkAcademico.Enabled = false;
                        checkAcademico.Checked = false;
                        this.Cursor = Cursors.Default;
                    }

                    if (lista.Count == 1)
                    {
                        MessageBox.Show("Adicione o segundo Responsável");
                        this.Text = "Responsável 2";
                        this.campoCodigo.Text = "";
                        this.campoNome.Text = "";
                        this.campoEndereco.Text = "";
                        this.campoEmail.Text = "";
                        this.campoSexo.Text = "";
                        this.campoTelefone.Text = "";
                        this.campoFiliacao.Text = "";
                        checkAcademico.Enabled = false;
                        checkAcademico.Checked = false;
                        this.Cursor = Cursors.Default;
                    }

                    if (lista[0].Categoria == "Responsável Acadêmico")
                    {
                        Carregar2(matricula);
                        this.Cursor = Cursors.Default;
                        return;
                    }

                    if (checkFinanceiro.Enabled == false)
                    {
                        MessageBox.Show("Responsáveis incluidos com sucesso");
                        this.Dispose();
                        this.Cursor = Cursors.Default;
                        return;
                    }
                }

                if (checkFinanceiro.Checked == true && checkAcademico.Checked == false)
                {
                    responsavel.Categoria = checkFinanceiro.Text;
                    if (carregar == true)
                    {
                        servicoResponsavel.alterar(responsavel, matricula);
                        MessageBox.Show("Responsáveis incluidos com sucesso");
                        this.Dispose();
                        return;
                    }
                    
                    servicoResponsavel.alterar(responsavel, matricula);
                    MessageBox.Show("alterado com sucesso");
                    if (lista[0].Categoria != "Responsável Financeiro" && lista.Count != 1 && carregar == false)
                    {
                        servicoResponsavel.excluir(lista[1].CodResp1);
                        MessageBox.Show("Responsavel: " + lista[1].Nome + " Foi Excluido");
                        MessageBox.Show("Adicione o segundo Responsável");
                        ResponsavelTela rt = new ResponsavelTela(matricula, nomeAluno);
                        this.Text = "Responsável 2";
                        this.campoCodigo.Text = "";
                        this.campoNome.Text = "";
                        this.campoEndereco.Text = "";
                        this.campoEmail.Text = "";
                        this.campoSexo.Text = "";
                        this.campoTelefone.Text = "";
                        this.campoFiliacao.Text = "";
                        checkFinanceiro.Enabled = false;
                        checkFinanceiro.Checked = false;
                        this.Cursor = Cursors.Default;
                    }

                    if (lista.Count == 1)
                    {
                        MessageBox.Show("Adicione o segundo Responsável");
                        ResponsavelTela rt = new ResponsavelTela(matricula, nomeAluno);
                        this.Text = "Responsável 2";
                        this.campoCodigo.Text = "";
                        this.campoNome.Text = "";
                        this.campoEndereco.Text = "";
                        this.campoEmail.Text = "";
                        this.campoSexo.Text = "";
                        this.campoTelefone.Text = "";
                        this.campoFiliacao.Text = "";
                        checkFinanceiro.Enabled = false;
                        checkFinanceiro.Checked = false;
                        this.Cursor = Cursors.Default;
                    }

                    if (lista[0].Categoria == "Responsável Financeiro")
                    {
                        Carregar2(matricula);
                        this.Cursor = Cursors.Default;
                        return;
                    }

                    if (checkAcademico.Enabled == false)
                    {
                        MessageBox.Show("Responsáveis incluidos com sucesso");
                        this.Dispose();
                        this.Cursor = Cursors.Default;
                        return;
                    }
                }

                if (checkAcademico.Checked == false && checkFinanceiro.Checked == false || checkAcademico.Enabled == false || checkFinanceiro.Enabled == false)
                {

                    responsavel.Categoria = "";
                    servicoResponsavel.inserir(responsavel, matricula);
                }
            }
            catch (SoapException ex)
            {
                var menssagem = ex.Message;
                menssagem = menssagem.Remove(0, menssagem.LastIndexOf("--->"));
                menssagem = menssagem.Remove(0, menssagem.IndexOf(":") + 1);

                if (menssagem.IndexOf('\n') >= 0)
                {
                    menssagem = menssagem.Remove(menssagem.IndexOf('\n'));
                }

                MessageBox.Show(menssagem, "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }

            this.Cursor = Cursors.Default;
        }


        public void Carregar(int matricula)
        {
            try
            {
                List<Responsavel> lista;
                lista = servicoResponsavel.pesquisar(matricula).ToList<Responsavel>();
                campoCodigo.Text = lista[0].CodResp1.ToString();
                campoNome.Text = lista[0].Nome;
                campoEndereco.Text = lista[0].Endereco;
                campoTelefone.Text = lista[0].Telefone;
                campoEmail.Text = lista[0].Email;
                campoSexo.Text = lista[0].Sexo;
                campoFiliacao.Text = lista[0].Filiacao;
                if (lista[0].Categoria == "Responsável Acadêmico")
                {
                    checkAcademico.Checked = true;
                }

                if (lista[0].Categoria == "Responsável Financeiro")
                {
                    checkFinanceiro.Checked = true;
                }

                if (lista[0].Categoria == "Responsável Financeiro e Acadêmico")
                {
                    checkAcademico.Checked = true;
                    checkFinanceiro.Checked = true;
                }
            }
            catch (ArgumentOutOfRangeException)
            {
                MessageBox.Show("Responsavel não cadastrado");
            }
        }

        public void Carregar2(int matricula)
        {
            try
            {
                carregar = true;
                List<Responsavel> lista;
                lista = servicoResponsavel.pesquisar(matricula).ToList<Responsavel>();
                campoCodigo.Text = lista[1].CodResp1.ToString();
                campoNome.Text = lista[1].Nome;
                campoEndereco.Text = lista[1].Endereco;
                campoTelefone.Text = lista[1].Telefone;
                campoEmail.Text = lista[1].Email;
                campoSexo.Text = lista[1].Sexo;
                campoFiliacao.Text = lista[1].Filiacao;
                if (lista[1].Categoria == "Responsável Acadêmico")
                {
                    checkAcademico.Checked = true;
                    checkFinanceiro.Checked = false;
                    checkAcademico.Enabled = false;
                    checkFinanceiro.Enabled = false;
                }

                if (lista[1].Categoria == "Responsável Financeiro")
                {
                    checkFinanceiro.Checked = true;
                    checkAcademico.Checked = false;
                    checkAcademico.Enabled = false;
                    checkFinanceiro.Enabled = false;
                }
            }
            catch (ArgumentOutOfRangeException)
            {
                MessageBox.Show("Responsavel não cadastrado");
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (campoCodigo.Text == "")
            {
                incluir();
            }
            else
            {
                Atualizar(matricula);
            }
            RealizarMatricula();
        }

        public void RealizarMatricula()
        {
            List<Responsavel> lista;
            lista = servicoResponsavel.pesquisar(matricula).ToList<Responsavel>();
            if (matricula == 1)
            {
                if (checkAcademico.Checked == true && checkFinanceiro.Checked == true || checkAcademico.Enabled == false && checkFinanceiro.Checked == true || checkFinanceiro.Enabled == false && checkAcademico.Checked == true)
                {
                    RealizarMatriculaTela rmt = new RealizarMatriculaTela(nomeAluno);
                    rmt.ShowDialog();
                }
                else
                {
                    MessageBox.Show("Falta Responsáveis");
                }
            }

            if (matricula != 1)
            {
                if (checkAcademico.Checked == true && checkFinanceiro.Checked == true || checkAcademico.Enabled == false && checkFinanceiro.Checked == true && lista.Count == 2 || checkFinanceiro.Enabled == false && checkAcademico.Checked == true && lista.Count == 2)
                {
                    RealizarMatriculaTela rmt = new RealizarMatriculaTela(nomeAluno);
                    rmt.ShowDialog();
                }
                else
                {
                    MessageBox.Show("Falta Responsáveis");
                }
            }
        }
    }
}

